<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // Promise是解决异步回调地狱的知识点
        // Promise 有三种状态。pedding，resovle，reject
        // Promise 是一个构造函数,同时构造函数里面需要传递函数，Promise里面的函数是一个立即可执行函数
        var p1 = new Promise((resolve, reject)=> {
            // 这个函数是一个立即执行函数。
            // 1.当你执行resolve函数的时候  p1状态变成resolve状态，
            // 2.当执行 reject函数时候  p1 状态变成reject
            // resolve()
            resolve()
        })

        // p1的状态为resolve状态。
        // promise实例对象上用的最多就是then方法
        // then方法中函数 到底执行哪一个方法，是根据p1的状态，如果p1的状态为resolve，那么执行第一个函数，否则执行第二个函数
        // p1.then(()=> {
        //     console.log("这是一个resolve状态")
        // },()=> {
        //     console.log("这是一个reject状态")
        // })

        // p1是一个Promise的实例对象。pedding


        // 二、then方法 (可以连写),then方法返回一个新的Promise实例对象
        //     then方法接收前一个then方法返回的数据或者状态
        // p1.then(()=> {
        //     return 666;
        // },()=> {
            
        // }).then((data)=> {
        //     // console.log(data)
        //     return data
        // }).then((data)=> {
        //     console.log(data)
        // })

        // p1.then(()=> {
        //     // 如何让p1的then方法返回的新的Promise的状态为reject状态
        //     // Promise.reject()
        //     return Promise.reject()
        // }).then(()=> {

        // }, ()=>{
        //     console.log("执行失败")
        // })

        // 三、race和all方法
        var task1 = new Promise((resolve, reject)=> {
            setTimeout(()=> {   
                resolve()
            }, 1000)
        })

        var task2 = new Promise((resolve, reject)=> {
            setTimeout(()=> {   
                reject()
            }, 2000)
        })

        // 全部，task1和task2 全部为resolve状态的时候才会是resolve状态
        // Promise.all([task1,task2]).then(()=> {
        //     console.log("resolve状态")
        // }, ()=> {
        //     console.log("reject状态")
        // })

        // race赛跑。
        Promise.race([task1,task2]).then(()=> {
            console.log("resolve状态")
        }, ()=> {
            console.log("reject状态")
        })
    </script>
</body>
</html>